#ifndef		__PINTYPE_H
#define		__PINTYPE_H

#include "stdint.h"

/*******************************************************************************
* @brief   DIR
*******************************************************************************/
#define PIN_MODE_IN_UP			0x01
#define PIN_MODE_IN_DN			0x02
#define PIN_MODE_IN_FLOAT		0x03
#define PIN_MODE_IN_AIN			0x04

// 低速，中速，高速
#define PIN_MODE_OUT_SL_PP		0x11
#define PIN_MODE_OUT_SL_OD		0x12
#define PIN_MODE_OUT_SM_PP		0x13
#define PIN_MODE_OUT_SM_OD		0x14
#define PIN_MODE_OUT_SH_PP		0x15
#define PIN_MODE_OUT_SH_OD		0x16

#define PIN_MODE_OUT_PP			PIN_MODE_OUT_SH_PP
#define PIN_MODE_OUT_OD			PIN_MODE_OUT_SH_OD

/*******************************************************************************
* @brief   通用
*******************************************************************************/
typedef struct
{
	void(*en)(void);
	void(*dis)(void);
	void(*tog)(void);
	uint8_t(*out_st)(void);
	uint8_t(*in_st)(void);
	void(*mode)(char pm);		//模式
} port_fun_pin_type;


/*******************************************************************************
* @brief   通用
*******************************************************************************/
typedef struct
{
	void(*en)(void);
	void(*dis)(void);
	void(*tog)(void);
	uint8_t(*out_st)(void);
	uint8_t(*in_st)(void);
	void(*dir_in_ft)(void);		//浮空输入
	void(*dir_in_up)(void);		//上拉输入
	void(*dir_out_pp)(void);	//推挽输出
	void(*dir_out_od)(void);	//开漏输出
} port_io_pin_type;

/*******************************************************************************
* @brief   输出
*******************************************************************************/
typedef struct
{
	void(*en)(void);
	void(*dis)(void);
	void(*tog)(void);
	uint8_t(*out_st)(void);
	void(*dir_out_pp)(void);	//推挽输出
	void(*dir_out_od)(void);	//开漏输出
} port_out_pin_type;

/*******************************************************************************
* @brief   输入
*******************************************************************************/
typedef struct
{
	uint8_t(*in_st)(void);
	void(*dir_in_ft)(void);		//浮空输入
	void(*dir_in_up)(void);		//上拉输入
	void(*dir_in_dn)(void);		//下拉输入
} port_in_pin_type;

#endif
